#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>

void read_childproc(int sig)
{
    int status;
    pid_t id = waitpid(-1, &status, WNOHANG);
    if(WIFEXITED(status)) {
        printf("终止的进程id：%d \n", id);
        printf("子进程返回值：%d \n", WEXITSTATUS(status));
    }
}

int main(int argc,char *argv[])
{
    pid_t pid;
    struct sigaction act;
    act.sa_handler = read_childproc;
    sigemptyset(&act.sa_mask);
    act.sa_flags=0;
    sigaction(SIGCHLD, &act, 0);

    pid = fork();
    if(pid == 0) {
        puts("这是子进程");
        sleep(10);
        return 12;
    } else {
        printf("子进程pid为：%d\n", pid);
        pid = fork();
        if(pid == 0) {
            puts("这是第二个子进程");
            sleep(8);
            exit(24);
        } else {
            printf("第二个子进程pid为：%d\n", pid);
            for(int i = 0;i < 5;++i) {
                puts("等待。。。");
                sleep(5);
            }
        }
    }

    return 0;
}
